package com.jin.concurrent.example.singleton;

import com.jin.concurrent.annoations.Recommand;
import com.jin.concurrent.annoations.ThreadSafe;

/**
 * @author JinLiu
 * <p>
 * 饿汉模式: 单例实例在第一次使用时进行创建
 * 构造函数没有过多的处理可以使用
 */
@ThreadSafe
@Recommand
public class SingletonExample7 {

    // 私有构造函数
    private SingletonExample7() {
    }

    // 静态工厂方法
    public static SingletonExample7 getInstance() {
        return Singleton.INSTANCE.getSingleton();
    }

    private enum Singleton {
        INSTANCE;

        private SingletonExample7 singleton;

        // JVM保证这个方法绝对只被调用一次
        Singleton() {
            singleton = new SingletonExample7();
        }

        public SingletonExample7 getSingleton() {
            return singleton;
        }
    }


}
